package com.station.Activitys.activity;

import android.graphics.Color;
import android.os.Handler;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.station.Activitys.R;
import com.station.Activitys.activity.base.BaseActivity;
import com.station.Activitys.adapter.ReleaseNewsAdapter;
import com.station.Activitys.bean.ReleaseNews;
import com.station.Activitys.bean.State;
import com.station.Activitys.http.manager.NewsManager;
import com.station.Activitys.utils.Constant;
import com.station.Activitys.utils.StringUtils;
import com.station.Activitys.utils.ToastUtils;
import com.station.Activitys.utils.CacheManger;
import com.station.Activitys.view.ScrollEditTextView;
import com.zhy.autolayout.AutoLinearLayout;

import org.simple.eventbus.Subscriber;
import org.simple.eventbus.ThreadMode;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.OnClick;

/**
 * 项目名称：基站管理平台 手机app
 * 类描述：发布信息
 * 创建人：张飞祥
 * 创建时间：2018/8/31 15:54
 * 修改人：张飞祥
 * 修改时间：2018/8/31 15:54
 * 修改备注：
 */
public class ReleaseNewsActivity extends BaseActivity {

    //返回按钮
    @Bind(R.id.iv_return)
    ImageView ivReturn;
    //标题
    @Bind(R.id.tv_title)
    TextView tvTitle;
    //信息标题
    @Bind(R.id.et_msg_title)
    EditText etMsgTitle;
    //信息内容
    @Bind(R.id.et_msg_content)
    ScrollEditTextView etMsgContent;

    //TODO 无数据显示视图
    //圆圈 img
    ImageView ivLoad;
    //加载布局
    AutoLinearLayout layoutLoad;
    //刷新文字
    TextView tvPush;
    //刷新布局
    AutoLinearLayout layoutPush;
    //外层预加载视图
    RelativeLayout layoutNoData;

    //有数据展示 视图
    RecyclerView rvList;

    //TODO 初始化网络请求
    public NewsManager mApiManager;

    //网络请求 true：错误 ，false 为空
    public boolean mHttpErrorFlag;
    //适配器
    private ReleaseNewsAdapter mAdapter = null;
    //数据源
    private List<ReleaseNews> mReleaseList = null;
    //用户 id
    private int mUserId;

    @Override
    protected void initUI() {
        setContentView(R.layout.act_release_news);
        //网络请求接口 常驻方法
        mApiManager = mApiManager.getNewsApiManager(this, this.getTaskId());
        //重新加载初始化视图
        initViews();

        //获取 用户 id
        mUserId = CacheManger.getUserId(mACache);

        //设置标题
        tvTitle.setText("信息发布");
        //显示返回按钮
        ivReturn.setVisibility(View.VISIBLE);
        //解决 滑动冲突
        rvList.setNestedScrollingEnabled(false);
    }

    @Override
    protected void initData() {
        //初始化 数据
        mReleaseList = new ArrayList<>();
        //开始网络请求
        initHttp();
    }

    /**
     * http 获取初审类别 网络请求
     */
    private void initHttp(){
        //显示无数据 刷新加载页面
        initShowViewLoading(true);
        //获取 当前人员列表
        mApiManager.newsUserList();
    }

    /**
     * 按钮点击事件
     * @return
     */
    @OnClick({R.id.iv_return,R.id.btn_submit})
    public void onClick(View view){
        switch (view.getId()){

            case R.id.iv_return:       //返回按钮
                finish();
                break;

            case R.id.btn_submit:      //提交按钮
                setSubmit();
                break;
        }
    }

    /**
     * 提交 数据
     */
    private void setSubmit() {
        //信息标题
        String title = etMsgTitle.getText().toString();
        //信息内容
        String content = etMsgContent.getText().toString();
        //选择人员的 id 集合
        String idStr = mAdapter.getUserIds();

        //TODO 逻辑判断
        if (title.equals("")){
            ToastUtils.showShort(ReleaseNewsActivity.this,"请输入信息标题");
        } else if (content.equals("")) {
            ToastUtils.showShort(ReleaseNewsActivity.this,"请输入信息内容");
        }else if (idStr.equals("")){
            ToastUtils.showShort(ReleaseNewsActivity.this,"请至少选择一个成员");
        }else{
            initShowTimeDialog("正在提交，请稍后....",ReleaseNewsActivity.this);
            mApiManager.newsReleaseSubmit(title,content,idStr,mUserId);
        }
    }

    /**
     * 信息列表 报错
     */
    @Subscriber(tag = Constant.BUS_NEWS_RELEASE_LIST_ERROR, mode = ThreadMode.MAIN)
    public void initReleaseNewsError(String httpError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                //当前是 网络请求 出错
                mHttpErrorFlag = true;
                //显示无数据 重新加载页面
                initShowViewLoading(false);
                //弹出提示
                ToastUtils.showShort(ReleaseNewsActivity.this, Constant.NETWORK_ERROR_MSG);
            }
        }, 1000);
    }


    /**
     * 信息列表  首次数据加载
     */
    @Subscriber(tag = Constant.BUS_NEWS_RELEASE_LIST, mode = ThreadMode.MAIN)
    public void initReleaseNews(final List<ReleaseNews> list) {

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (rvList != null) {
                    if (list != null && list.size() != 0) {
                        //显示 数据列表 布局
                        initShowViewData();

                        //TODO 填充数据
                        //设置 信息列表 数据
                        mReleaseList.addAll(list);
                        //设置 通讯供求 适配器
                        mAdapter = new ReleaseNewsAdapter(ReleaseNewsActivity.this, list);
                        //添加 适配器 样式
                        rvList.setLayoutManager(new LinearLayoutManager(ReleaseNewsActivity.this, LinearLayoutManager.VERTICAL, false));
                        //添加 适配器
                        rvList.setAdapter(mAdapter);

                    } else {
                        //当前是 数据错误
                        mHttpErrorFlag = false;
                        //显示无数据 重新加载页面
                        initShowViewLoading(false);
                    }
                }
            }
        }, 1000);
    }

    /**
     * 信息列表发布 报错
     */
    @Subscriber(tag = Constant.BUS_NEWS_RELEASE_SUBMIT_ERROR, mode = ThreadMode.MAIN)
    public void initReleaseSubmitError(String httpError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁加载框
                mTimeDialog.dismiss();
                //弹出提示
                ToastUtils.showShort(ReleaseNewsActivity.this, Constant.NETWORK_ERROR_MSG);
            }
        }, 1000);
    }


    /**
     * 信息列表发布
     */
    @Subscriber(tag = Constant.BUS_NEWS_RELEASE_SUBMIT, mode = ThreadMode.MAIN)
    public void initReleaseSubmit(final State state) {
        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                mTimeDialog.dismiss();
                //返回值判断
                if (state.getState().equals("0")) {
                    ToastUtils.showShort(ReleaseNewsActivity.this, state.getMsg());
                }else {
                    // 提示 dialog
                    new MaterialDialog.Builder(ReleaseNewsActivity.this)
                            .title("提示")
                            .titleColor(Color.parseColor("#1380ce"))
                            .content("信息已提交成功！")
                            .positiveText("我知道啦")
                            .positiveColor(Color.parseColor("#1380ce"))
                            .onPositive(new MaterialDialog.SingleButtonCallback() {
                                @Override
                                public void onClick(MaterialDialog dialog, DialogAction which) {
                                    finish();
                                }
                            }).show();
                }
            }
        }, 1000);
    }


    /**
     * 无数据页面
     */
    public void initShowViewLoading(boolean loadFlag) {
        //重新加载初始化视图
        initViews();
        //最外层无数据页面 显示
        layoutNoData.setVisibility(View.VISIBLE);
        //列表 数据展示页面 隐藏
        rvList.setVisibility(View.GONE);
        /**
         * 动态判断 显示 当前 是重新加载页面，还是 圆圈页面
         *
         * true： 圆圈页面
         * false：重新加载页面
         */
        if (loadFlag) {
            initShowLoadRotate();
        }else{

            //隐藏圆圈页面
            layoutLoad.setVisibility(View.GONE);
            //显示重新加载页面
            layoutPush.setVisibility(View.VISIBLE);

            /**
             * 动态判断 当前 是网络 问题？ 还是 数据为空，显示不同的字段 与操作
             */
            if (mHttpErrorFlag){
                //TODO 设置重新加载文字，重新加载网络请求
                String pushStr = "重新加载";
                //给文字添加下划线，并且添加点击事件
                tvPush.setText(StringUtils.setString(pushStr, 0, pushStr.length(),
                        new ForegroundColorSpan(Color.parseColor("#808080")), new ClickableSpan() {
                            @Override
                            public void onClick(View view) {
                                //开始网络请求
                                initHttp();
                                //显示圆圈加载页面
                                initShowLoadRotate();
                            }
                        }));
                tvPush.setMovementMethod(LinkMovementMethod.getInstance());
            }else{
                tvPush.setText("暂无数据");
            }
        }
    }

    /**
     * 转圈 动画布局显示
     */
    public void initShowLoadRotate(){
        /**
         * 开始倒计时
         */
        //显示圆圈页面
        layoutLoad.setVisibility(View.VISIBLE);
        //隐藏重新加载页面
        layoutPush.setVisibility(View.GONE);
        /**
         * 设置圆圈动画
         */
        Animation circle_anim = AnimationUtils.loadAnimation(this, R.anim.load_public_rotate);
        LinearInterpolator interpolator = new LinearInterpolator();  //设置匀速旋转，在xml文件中设置会出现卡顿
        circle_anim.setInterpolator(interpolator);
        if (circle_anim != null) {
            ivLoad.startAnimation(circle_anim);  //开始动画
        }
    }

    /**
     * 有数据数据页面
     */
    public void initShowViewData() {
        //重新加载初始化视图
        initViews();
        //选择人员列表 显示
        rvList.setVisibility(View.VISIBLE);
        //最外层无数据页面 隐藏
        layoutNoData.setVisibility(View.GONE);
    }




    /**
     * 初始化 view 视图
     */
    private void initViews() {

        /**
         * 数据预加载页面
         */
        //圆圈 img
        ivLoad = (ImageView) findViewById(R.id.iv_load);
        //加载布局
        layoutLoad = (AutoLinearLayout) findViewById(R.id.layout_load);
        //刷新文字
        tvPush = (TextView) findViewById(R.id.tv_push);
        //刷新布局
        layoutPush = (AutoLinearLayout) findViewById(R.id.layout_push);
        //外层预加载视图
        layoutNoData = (RelativeLayout) findViewById(R.id.layout_no_data);

        /**
         * 有数据展示页面
         */
        //选择人员 列表
        rvList = (RecyclerView) findViewById(R.id.rv_list);
    }
}
